using System;

namespace GraphSpace
{
	public class Knoten
	{
		public int id;		// Id des Knotens
		public int x;		// x-Koordinate
		public int y;		// y-Koordinate
				
		// temporäre Attribute für Algorithmen
		public int position;	// Position in Priority-Queue
		public int bucket;		// Bucket in Dials Implementation
		
		public double distance;	// Distanz im Dijkstra
		public double realdist;	// ManhattenDIstanz im Dijkstra
		public Knoten predeseccor;	// Vorgänger des kürzesten Weges
		public bool besucht;		// Flag, ob Knoten bereits eingefügt wurde
		public bool entfernt;	// Flag, ob Knoten bereits aus der Queue entfernt wurde
        public bool foundBySearch;	// Flag für die bidirektionale Suche
		

		
		public Knoten ()
		{
			this.id = 0;
			this.x = 0;
			this.y = 0;
			
			this.position = 0;
			this.bucket = 0;
			this.distance = Double.MaxValue;
			this.realdist = Double.MaxValue;
			this.predeseccor = null;
			this.besucht = false;
			this.entfernt = false;
			this.foundBySearch = false;
		}
		
		public Knoten (int id, int x, int y)
		{
			this.id = id;
			this.x = x;
			this.y = y;
			
			this.position = 0;
			this.bucket = 0;
			this.distance = Double.MaxValue;
			this.realdist = Double.MaxValue;
			this.predeseccor = null;
			this.besucht = false;
			this.foundBySearch = false;
		}
		
		public virtual void init (int id, int x, int y)
		{
			this.id = id;
			this.x = x;
			this.y = y;
		}
		
		public override string ToString ()
		{
			return string.Format ("Knoten: Id={0}", id);
		}
		
		// setzt die Attribute für Algorithmen auf ihre Standardwerte zurück
		public virtual void reset()
		{	
			this.position = 0;
			this.bucket = 0;
			this.distance = Double.MaxValue;
			this.realdist = Double.MaxValue;
			this.predeseccor = null;
			this.besucht = false;
			this.foundBySearch = false;
		}
	}
}
